<?php
/**
 * Nweb Editor
 *
 * This script is protected by copyright. Its use, copying, modification
 * and distribution without written consent of the author is prohibited.
 *
 * @category    source
 * @package     pl.nweb.editor.locale
 * @author      Krzysztof Kardasz <krzysztof.kardasz@gmail.com>
 * @copyright   Copyright (c) 2012 Krzysztof Kardasz
 * @license     http://www.gnu.org/licenses/lgpl-3.0.txt  GNU Lesser General Public
 * @version     1.0 $Id$
 * @link        https://nweb-editor.googlecode.com
 * @link        http://editor.nweb.pl
 */

namespace pl\nweb\editor\locale;

/**
 * Menadżer lokalizacji
 *
 * @category    source
 * @package     pl.nweb.editor.locale
 * @author      Krzysztof Kardasz <krzysztof.kardasz@gmail.com>
 * @copyright   Copyright (c) 2012 Krzysztof Kardasz
 * @version     1.0 $Id$
 */
class Manager
{
    /**
     * Zend Locale
     *
     * @var null|\Zend_Locale
     */
    static private $_locale = null;

    /**
     * Domyślny język
     *
     * @var string
     */
    static private $_default = null;

    /**
     * Wspierane języki
     *
     * @var array
     */
    static private $_supported = array();

    /**
     * Zwraca obiekt lokalizacji
     *
     * @return null|\Zend_Locale
     */
    public static function getLocale ()
    {
        if(self::$_locale === null) {
            self::$_locale = new \Zend_Locale (self::getDefaultLanguage());
        }
        return self::$_locale;
    }

    /**
     * Definiuje obiekt lokalizacji
     *
     * @param \Zend_Locale $locale locale
     * @return void
     */
    public static function setLocale (\Zend_Locale $locale)
    {
        self::$_locale = $locale;
    }

    /**
     * Definiuje domyślną lokalizację
     *
     * @param \Zend_Locale $locale locale
     * @return void
     */
    public static function setDefaultLocale (\Zend_Locale $locale)
    {
        \Zend_Locale::setDefault($locale);
    }

    /**
     * Definiuje domyślny język
     *
     * @param  string $language domyślny język
     * @return void
     */
    public static function setDefaultLanguage ($language)
    {
        self::$_default = $language;
    }

    /**
     * Zwraca domyślny język
     *
     * @return string
     */
    public static function getDefaultLanguage ()
    {
        if(self::$_default === null) {
            $locale = new \Zend_Locale(current(array_keys(\Zend_Locale::getDefault())));
            self::$_default = $locale->getLanguage();
        }
        return self::$_default;
    }

    /**
     * Definiuje wspierane języki
     *
     * @param array $langs
     * @return void
     */
    public static function setSupportedLanguages (array $langs)
    {
        self::$_supported = $langs;
    }

    /**
     * Zwraca wspierane języki
     *
     * @return array
     */
    public static function getSupportedLanguages ()
    {
        return self::$_supported;
    }

    /**
     * Zwraca flagę czy język jest wspierany
     *
     * @param  string $lang język
     * @return boolean
     */
    public static function isSupportedLanguage ($lang)
    {
        return in_array($lang, self::$_supported);
    }

    /**
     * Zwraca flagę czy lokalizacja jest wspierana
     *
     * @param  \Zend_Locale $locale
     * @return boolean
     */
    public static function isSupportedLocale (\Zend_Locale $locale)
    {
        return self::isSupportedLanguage($locale->getLanguage());
    }
}